﻿/**
 * 公共参数，主要存放自定义的搜索条件数据
 */
var TotalAmount;
var PagerQueryParam = {
    PageIndex: 0, PageSize: 20, Keywords: "", Where: {}
};
var DataSchema = { iTotalRecords: 0, iTotalDisplayRecords: 0, sEcho: "", sColumns: "", aaData: null };
/**
 * datatable基本设置
 * @sourceUrl 数据源Url
 * @columns 列
 */
function dataTableInit(selector, sourceUrl, columns, columnDefs = '', paging = true, bFilter = true, pageLength = 20) {
    $(selector).DataTable({
        //"dom": '<"top"l<"clear">f>rt<"bottom"p><"clear">',  //设置分页的位置
        "bProcessing": true,
        // 件数选择下拉框内容
        "lengthMenu": [20, 50, 100],
        "iDisplayStart": 0,
        // 每页的初期件数 用户可以操作lengthMenu上的值覆盖
        "pageLength": pageLength,   //默认50
        "paging": paging,//开启表格分页
        "bFilter": bFilter,//去掉搜索框  
        "processing": true, // 是否显示取数据时的那个等待提示
        "serverSide": true,//这个用来指明是通过服务端来取数据,如果不加
        "paginationType": "full_numbers",      //详细分页组，可以支持直接跳转到某页  
        "ajaxSource": sourceUrl,//这个是请求的地址
        "serverData": retrieveData, // 获取数据的处理函数
        // 每次创建是否销毁以前的DataTable,默认false
        "destroy": true,
        //设置列宽自动
        //"autoWidth":true,
        "columns": columns,
        "columnDefs": columnDefs,
        "ordering": false,
        "fnDrawCallback": function () {
            var api = this.api();
            var startIndex = api.context[0]._iDisplayStart;        //获取到本页开始的条数 　
            api.column(0).nodes().each(function (cell, i) {
                cell.innerHTML = startIndex + i + 1;
            });
        },
        "language": {
            "url": "/js/custom/datatable_lang_cn.json"
        }
    });

    //var processingMessage = "";
    //processingMessage += '<div id="' + $(selector).attr("id") + '_processing" class="dataTables_processing" style="display: none;">' + '加载中...' + '</div>'
    //$(selector).append(processingMessage);
}
/**
 * form表单序列化方法
 */
$.fn.serializeObject = function () {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function () {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

/**
 * 数据处理的方法
 * @sSource datatable中设置的url
 * @aoData 要传递到后台的数据主要是分页的信息
 * @fnCallback 回调函数
 */
function retrieveData(sSource, aoData, fnCallback) {
    var processingSelector = "#" + this.attr("id") + "_processing";
    var ds = aoData.find(t => t.name == "iDisplayStart").value;
    var dl = aoData.find(t => t.name == "iDisplayLength").value;
    var kw = "";
    if (aoData.find(t => t.name == "sSearch") != undefined) {
        kw = aoData.find(t => t.name == "sSearch").value;
    }
    PagerQueryParam.PageSize = dl;
    PagerQueryParam.PageIndex = ds / dl + 1;
    PagerQueryParam.Keywords = kw;

    $.ajax({
        url: sSource,//这个就是请求地址对应sAjaxSource
        data: JSON.stringify(PagerQueryParam),//这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数
        type: 'post',
        dataType: 'json',
        contentType: "application/json",
        async: true,
        beforeSend: function () {
            $(processingSelector).show();
        },
        complete: function () {
            $(processingSelector).hide();
        },
        success: function (result) {   //后台执行成功的回调函数
            if (result.code == 200) {
                if ($("#amount").length == 1) {
                    $("#amount").text(`查询结果总支付金额：${result.msg}`);
                }
                DataSchema.sEcho = aoData.find(t => t.name == "sEcho").value;
                DataSchema.iTotalRecords = DataSchema.iTotalDisplayRecords = result.total;
                DataSchema.sColumns = null;
                DataSchema.aaData = result.data;
                fnCallback(DataSchema);//把返回的数据传给这个方法就可以了,datatable会自动绑定数据的 
            }
        },
        error: function (msg) {
            alert(msg.status + ":" + msg.statusText, "error");
        }
    });
} 
